System and method for decoding correlated data

ABSTRACT

A communication system includes an encoder configured to encode first data words to generate code words. A modulator is configured to modulate the code words into a first signal that is transmitted on a communication channel. A demodulator is configured to demodulate a second signal, received from the communication channel, into estimates of the code words. The second signal is based on the first signal. A decoding module is configured to group the estimates of the code words into a plurality of groups of correlated data bits, wherein the correlated data bits include statistical relationships between different data bits, generate a plurality of group estimate signals each corresponding to a respective one of the plurality of groups of correlated data bits, and generate, by combining the plurality of group estimate signals, an estimate signal corresponding to the first data words.

CROSS-REFERENCE TO RELATED APPLICATIONS

The present disclosure is a continuation of U.S. patent application Ser.No. 13/470,495 (now U.S. Pat. No. 8,321,749), filed on May 14, 2012,which is a continuation of U.S. patent application Ser. No. 12/323,995(now U.S. Pat. No. 8,181,081), filed on Nov. 26, 2008, which claims thebenefit of U.S. Provisional Application No. 60/991,502, filed on Nov.30, 2007. The entire disclosures of the applications referenced aboveare incorporated herein by reference.

FIELD

The present disclosure relates to communication channels, and moreparticularly to channel decoding systems.

BACKGROUND

The background description provided herein is for the purpose ofgenerally presenting the context of the disclosure. Work of thepresently named inventors, to the extent the work is described in thisbackground section, as well as aspects of the description that may nototherwise qualify as prior art at the time of filing, are neitherexpressly nor impliedly admitted as prior art against the presentdisclosure.

In communication systems, channel noise may cause transmission errorsbetween a source and a receiver. Error correction coding (ECC)techniques may detect and correct channel transmission errors.Low-Customer density parity-check (LDPC) codes are examples of ECC blockcodes that may provide coding gains to improve performance.

A coding gain is an amount of additional noise that an ECC coded systemmay handle compared to an uncoded system. In other words, the codinggain may enable the ECC coded system to transmit at a lower bit errorrate (BER) than an uncoded system. Therefore, in applications in whichtransmit power may be limited, the coding gains of LDPC codes may makethe difference between reliable and unreliable communication.

Referring now to FIG. 1, a functional block diagram illustrating aconventional communication system 10 is shown. The communication system10 may include an LDPC encoder 12, a modulator 14, a channel 16, ademodulator 18, and an iterative LDPC decoder 20. The iterative LDPCdecoder 20 may include a channel detector 22, such as a soft-outputViterbi algorithm (SOVA) detector, and an LDPC decoder 24.

Using a given LDPC code, the LDPC encoder 12 encodes a stream ofdatawords (u) from a source. A dataword may refer to a group of binarydata bits that is suitable for input to the LDPC encoder 12. The LDPCencoder 12 outputs a stream of codewords (c) which may be in the form ofbinary data. A codeword may refer to a group of bits generated by theLDPC encoder 12 based on an input dataword.

LDPC codes are block codes and thus an LDPC code may be represented byan (M×N) parity-check matrix (H) that includes M rows and N columns. Mmay represent a number of constraints, such as parity-check equations. Nmay represent a number of bits. Entries of the parity-check matrix maybe a one or a zero. For example, a bit v_(n) participates in aconstraint c_(m) if H_(m,n)=1.

The modulator 14 modulates the frequency, amplitude, and/or phase of thestream of codewords to generate a transmitted signal (w) that includes amodulated communication or storage signal. For example, the channel 16may include a storage medium, such as a magnetic storage medium, anoptical storage medium, or an electrical storage medium. The channel 16may also include a communication channel. The channel 16 provides areceived signal (w′), which may represent the transmitted signalcorrupted by noise (n) or other interference.

The demodulator 18 demodulates the received signal and provides aninitial estimate signal (r′) of the stream of codewords. The channeldetector 22 of the iterative LDPC decoder 20 receives the initialestimate signal, which may be based on hard information in blocks ofdata. The initial estimate signal may include corrupted bits. Hardinformation represents hard decisions on whether data bits are ones orzeros. In other words, a hard decision for a bit may be either a one ora zero.

The channel detector 22 may generate soft information via a softdecision that is based on the initial estimate signal and data from thechannel 16. Soft information represents soft decisions on whether databits are ones or zeros. In other words, a soft decision for a bit may bea real number that represents a probability or a likelihood of beliefthat the bit is a one or a zero.

For example, the soft information may be log-likelihood ratios (LLRs).An LLR is equal to the logarithm of the probability (Pr) that a bit isequal to one divided by the probability that the bit is equal to zero.In other words, the LLR of a bit v may be defined as:

${{LLR}(v)} = {\log{\frac{\Pr\left( {v = 1} \right)}{\Pr\left( {v = 0} \right)}.}}$

The sign of the LLR indicates a most likely value of the bit v. Forexample, a negative LLR relates to a higher probability of the bit beinga 0. The value of the LLR indicates certainty of the value. For example,a larger value LLR relates to a higher certainty of the bit being a 0 ora 1.

For example, the channel detector 22 may generate the soft informationbased on the Viterbi algorithm. The channel detector 22 may alsogenerate the soft information based on channel factors such as a type ofmodulation used by the modulator 14 and channel parameters such asadditive white Gaussian noise (AWGN).

The LDPC decoder 24 receives the soft information and may attemptsatisfying M parity-check equations of the parity-check matrix using thesoft information. However, if one or more of the parity-checkconstraints are not satisfied, the LDPC 24 decoder may generate feedbackinformation. For example, a message-passing algorithm such as asum-product algorithm may be used to generate the feedback information.And in such an example, feedback messages from check nodes may be summedto generate the feedback information for a bit.

The channel detector 22 receives the feedback information and may updatethe soft information from the channel based on the feedback information.For example, the channel detector 22 may sum the soft information andthe feedback information to generate updated soft information. The LDPCdecoder 24 receives the updated soft information, and the processrepeats.

For example, the iterative LDPC decoder 20 may repeat this process fornumerous iterations to decode an entire block of data. The iterativeLDPC decoder 20 may continue until a valid codeword is found thatsatisfies all M parity-check equations. The iterative LDPC decoder 20may also continue until an allotted time has elapsed or when a certainnumber of iterations have occurred.

The iterative LDPC decoder 20 generates an estimate signal (r) based onthe soft information and the iterative decoding process. The estimatesignal represents an estimate of the original transmitted stream ofdatawords. For example, the estimate signal may include the most likelydatawords. The estimate signal may also include the original stream ofdatawords if no error exists.

Referring now to FIG. 2A, the LDPC decoder 24 may include a plurality ofnodes 30. The nodes 30 illustrate the iterative message-passing processbetween variable and check nodes (described above) which is used by atypical LDPC decoder 24. For example, the nodes 30 represents thefollowing parity-check matrix H:

$H = {\begin{bmatrix}1 & 1 & 1 & 0 & 0 & 0 \\1 & 0 & 0 & 1 & 1 & 0 \\0 & 1 & 1 & 0 & 0 & 1 \\0 & 0 & 0 & 1 & 1 & 1\end{bmatrix}.}$

The nodes 30 may include check nodes c₀ (34-0), c₁ (34-1), c₂ (34-2),and c₃ (34-3) (collectively referred to as check nodes 34). The nodes 30may also includes variable nodes v₀ (36-0), v₁ (36-1), v₂ (36-2), v₃(36-3), v₄ (36-4), and v₅ (36-5) (collectively referred to as variablenodes 36).

Referring now to FIG. 2B, the relationship between the check nodes 34,the variable nodes 36, and the parity-check matrix H is shown. Thevariable nodes 36 correspond to the N columns of the parity-check matrixH. The check nodes 34 correspond to the M rows of the parity-checkmatrix H.

The interacting nodes 30 may be referred to as a bipartite graph becauseno nodes of the same type (i.e., variable nodes and check nodes) areconnected to each other. Communication lines connect check nodes 34 tovariable nodes 36. In other words, one of the check nodes 34 isconnected to one of the variable nodes 36 if the corresponding entry inthe parity-check matrix is a one. For example, check node c₀ (34-0) isconnected to variable node v₀ (36-0) because H_(0,0)=1.

Information received from the channel 16 is communicated to the variablenodes 36 via the channel detector 22. The variable nodes 36 may pass theinformation up to the check nodes 34. For example, variable node v₀(36-0) may pass a message (i.e., channel information) to check nodes c₀(34-0) and c₁ (34-1) because the nodes are connected.

The check nodes 34 may compute messages based on the informationreceived from the variable nodes 36. For example, one of the check nodes34 may compute a message by summing all messages received from variablenodes 36. The check nodes 34 may then pass the messages back torespective variable nodes 36.

For example, check node c₀ (34-0) may compute a message by summingmessages received from variable nodes v₀ (36-0), v₁ (36-1), and v₂(36-2) because the nodes are connected. Check node c₀ (34-0) may alsosend the message back to variable nodes v₀ (36-0), v₁ (36-1), and v₂(36-2) because the nodes are connected.

The variable nodes 36 may then compute messages based on the messagesreceived from the check nodes 34. For example, one of the variable nodes36 may compute a message by summing all messages received from checknodes 36. For example, variable node v₀ (36-0) may compute a feedbacksignal by summing messages received from check nodes c₀ (34-0) and c₁(34-1) because the nodes are connected.

The check nodes 34 may send the feedback signals back to the channeldetector 22. The channel detector 22 may generate updated softinformation based on the feedback signals and the soft information. TheLDPC decoder 24 then receives the updated soft information.

The iterative message-passing process may be repeated until apredetermined condition is satisfied. After the predetermined conditionis satisfied, the iterative LDPC decoder 20 may generate and output anestimate signal r. For example, the iterative message-passing processmay continue until a predetermined number of iterations have occurred oruntil all parity-check equations are satisfied. For example, theparity-check equations corresponding to the parity-check matrix H are:c ₀ =v ₀ +v ₁ +v ₂c ₁ =v ₀ +v ₃ +v ₄c ₂ =v ₁ +v ₂ +v ₅c ₃ =v ₃ +v ₄ +v ₅.

Referring now to FIG. 3A, an exemplary variable node computation isshown. A variable node 38 receives an initial bit estimate (y), whichmay be an LLR, from a channel detector (not shown). The variable node 38may also receive return messages x₀, x₁, and x₂ from the different checknodes. The variable node 38 may generate return messages based on thereceived return messages and the initial bit estimate. For example, thevariable node 38 may generate return messages for each check node bysumming all of the other received messages, as shown in FIG. 3B.

SUMMARY

A decoding system for a communication channel includes N parallelchannel detection modules that generate N first probability vectorsbased on sequences of X correlated bits in each of N groups ofcorrelated bits, respectively. The decoding system also includes Nparallel updating modules that generate M second probability vectorsbased on the N first probability vectors and N feedback signals. Thedecoding system also includes N parallel estimation modules thatgenerate estimates of the X correlated bits in each of the N groups ofcorrelated bits based on the M second probability vectors. The decodingsystem also includes N parallel decoding modules that generate the Nfeedback signals and N output signals based on the estimates of the Xcorrelated bits in each of the N groups of correlated bits. X is aninteger greater than one, M is an integer greater than or equal to one,and N is an integer greater than or equal to M.

In other features, the decoding system further includes N parallelreference modules that selectively set the N feedback signals and aportion of at least one of the M second probability vectors to areference voltage based on a difference between K and X. K is based on anumber of adders in each of the N parallel updating modules, and K is aninteger greater than or equal to X.

In other features, the decoding system further includes a distributionmodule that selectively distributes the N first probability vectors andthe N feedback signals to the N parallel updating modules based on adifference between K and X. K is based on a number of adders in each ofthe N parallel updating modules, and K is an integer greater than orequal to X.

In other features, the decoding system further includes an interleavingmodule that receives the N feedback signals, that interleaves the Nfeedback signals, and that selectively distributes the N interleavedfeedback signals to the N parallel updating modules based on adifference between K and X. The decoding system also includes adeinterleaving module that receives interleaved estimates of the Xcorrelated bits in each of the N groups of correlated bits from the Nparallel estimation modules, that deinterleaves the interleavedestimates of the X correlated bits in each of the N groups of correlatedbits, and that outputs the estimates of the X correlated bits in each ofthe N groups of correlated bits. K is based on a number of adders ineach of the N parallel updating modules, and K is an integer greaterthan or equal to X.

In still other features, the systems and methods described above areimplemented by a computer program executed by one or more processors.The computer program can reside on a computer readable medium such asbut not limited to memory, nonvolatile data storage, and/or othersuitable tangible storage mediums.

Further areas of applicability of the present disclosure will becomeapparent from the detailed description, the claims and the drawings. Thedetailed description and specific examples are intended for purposes ofillustration only and are not intended to limit the scope of thedisclosure.

BRIEF DESCRIPTION OF DRAWINGS

The present disclosure will become more fully understood from thedetailed description and the accompanying drawings, wherein:

FIG. 1 is a functional block diagram of a conventional communicationsystem;

FIG. 2A is a functional block diagram of a conventional LDPC decoder;

FIG. 2B is a parity-check matrix representing an exemplary LDPC code;

FIGS. 3A and 3B are schematics illustrating an exemplary variable nodecomputation;

FIG. 4A is a functional block diagram of an iterative decoding moduleaccording to the present disclosure;

FIG. 4B is a schematic illustrating an iterative decoding process of agroup of correlated information bits according to the presentdisclosure;

FIG. 5 is a functional block diagram of a communication system accordingto the present disclosure;

FIG. 6 is a functional block diagram of a parallel iterative decodingmodule according to the present disclosure;

FIG. 7A is a functional block diagram of a first embodiment of aparallel computation module according to the present disclosure;

FIG. 7B is a flow diagram illustrating a method for operating the firstembodiment of the parallel computation module according to the presentdisclosure;

FIG. 8A is a functional block diagram of a second embodiment of theparallel computation module according to the present disclosure;

FIG. 8B is a schematic illustrating an exemplary computation performedby the second embodiment of the parallel computation module according tothe present disclosure;

FIG. 8C is a flow diagram illustrating a method for operating the secondembodiment of the parallel computation module according to the presentdisclosure;

FIG. 9A is a functional block diagram of a third embodiment of theparallel computation module according to the present disclosure;

FIG. 9B is a functional block diagram of an exemplary third embodimentof the parallel computation module according to the present disclosure;

FIG. 9C is a flow diagram illustrating a method for operating the thirdembodiment of the parallel computation module according to the presentdisclosure;

DESCRIPTION

The following description is merely exemplary in nature and is in no wayintended to limit the disclosure, its application, or uses. For purposesof clarity, the same reference numbers will be used in the drawings toidentify similar elements. As used herein, the phrase at least one of A,B, and C should be construed to mean a logical (A or B or C), using anon-exclusive logical or. It should be understood that steps within amethod may be executed in different order without altering theprinciples of the present disclosure.

As used herein, the term module may refer to, be part of, or include anApplication Specific Integrated Circuit (ASIC), an electronic circuit, aprocessor (shared, dedicated, or group) and/or memory (shared,dedicated, or group) that execute one or more software or firmwareprograms, a combinational logic circuit, and/or other suitablecomponents that provide the described functionality. The software orfirmware programs can be tangibly stored on a computer-usable orcomputer-readable medium. For the purposes of this description, acomputer-usable or computer readable medium can be any apparatus thatcan contain, store, communicate, propagate, or transport the program foruse by or in connection with the instruction execution system,apparatus, or device. The medium can be an electronic, magnetic,optical, electromagnetic, or semiconductor system (or apparatus ordevice) or a propagation medium. Examples of a computer-readable mediuminclude a semiconductor or solid state memory, magnetic tape, aremovable computer diskette, a random access memory (RAM), a read-onlymemory (ROM), a rigid magnetic disk and an optical disk. Currentexamples of optical disks include compact disk-read only memory(CD-ROM), compact disk-read/write (CD-RAN) and DVD.

Inputs and outputs of a communication channel may include correlateddata. The correlated data may include statistical relationships betweendifferent data bits. For example, communication systems that includechannels with memory may output correlated data. Channels with memorymay include partial-response channels in data storage applications.

For example, communication systems using tensor-product codes (TPCs) mayalso include channels that output correlated data. TPCs include twolevels of code (e.g., C1 and C2), and thus the data that is output fromthe outer level of code C2 may be correlated to the input and/or outputof inner level code C1.

For example, a multi-constellational transmission system such as aquadrature amplitude modulation (QAM) system may include a channel thatoutputs correlated data. The QAM system may group and map data bits tosignal points for transmission. Thus, the data bits in the same groupsmay be correlated.

Typical decoders assume that all input data bits are statisticallyindependent. The present disclosure improves decoders by modifying theiterative decoding process with regard to correlated data, which mayresult in a higher performance (e.g., faster) decoder. If a channeloutputs correlated data, the correlation may only span a few data bits.Therefore, data bits that are likely to have correlated information maybe grouped together and decoded together. The number of data bits ineach group may vary, and data bits within a particular group need not beconsecutive.

Furthermore, in high-performance applications, such as magneticrecording data storage, stringent size and power constraints may requireefficient decoder implementations. Typical hardware systems only providefor single bit (i.e., bit-by-bit) error correction. In other words,typical hardware systems do not provide for a single error correctionarchitecture that may operate concurrently on several different groupsand/or sequences of correlated data bits. Additionally, typical hardwaresystems do not provide for a single error correction architecture thatmay operate at various error correction code rates and on variouslengths (or sizes) of correlated input data sequences.

Referring now to FIG. 4A, an iterative decoding module 40 is shown. Theiterative decoding module 40 may include a channel detection module 42,a computation module 44, and a decoding module 46. For example, thechannel detection module 42 may include, for example, a soft-outputViterbi algorithm (SOVA) detector. The decoding module 46 may include,for example, an LDPC decoder.

The iterative decoding module 40 may decode LDPC encoded data bits basedon an iterative decoding process using soft information. The softinformation may be probabilities or likelihoods of belief that the databits are ones or zeros. For example, the soft information may belog-likelihood ratios (LLRs) for each of the data bits.

The channel detection module 42 receives an initial estimate signal (r′)from a channel via a demodulator (not shown). The channel detectionmodule 42 may group k correlated data bits together from the receivedsignal. The channel detection module 42 generates the soft informationbased on the k correlated data bits. More specifically, the channeldetection module 42 generates an initial probability vector P_(i) oflength 2^(k)−1. For example, the initial probability vector P_(i) mayinclude LLRs for each possible sequence of the k correlated data bits.

The computation module 44 receives the initial probability vector P_(i).The computation module 44 also receives feedback signalsP_(f)(x₀)-P_(f)(x_(k-k)) (collectively referred to as feedback signalsP_(f)(x)) for each of the k data bits from the decoding module 46. Forexample, the feedback signals P_(f)(x) may be LLRs for each of the kdata bits to be used in the next decoding iteration.

The computation module 44 generates bit estimations P(x₀)-P(x_(k-1))(collectively referred to as bit estimations P(x)) for each of the kdata bits based on the initial probability vector P_(i) and the feedbacksignals P_(f)(x). The bit estimations P(x) may be LLRs for each of the kdata bits.

The decoding module 46 receives the bit estimations P(x). The decodingmodule 46 may generate an estimate signal (r) based on the bitestimations P(x) if a predetermined condition has been satisfied. Thecondition may require, for example, that a predetermined number ofdecoding iterations occur or that all parity-check equations besatisfied. If the condition is satisfied, the decoding module 46 mayoutput the estimate signal.

If the predetermined condition is not satisfied, the decoding module 46generates the feedback signals P_(f)(x) for each of the k data bits. Thefeedback signals P_(f)(x) may be generated based on typicalmessage-passing decoding between nodes. For example, a feedback signalP_(f)(x) for a data bit may be a sum of check node messages received ata variable node corresponding to the data bit. The decoding module 46sends the feedback signals P_(f)(x) the computation module 44 to be usedin another decoding iteration. This iterative decoding process may berepeated until the predetermined condition is satisfied.

Referring now to FIG. 4B, a schematic 50 illustrates the iterativedecoding process of a group of k correlated data bits discussed abovewith regard to FIG. 4A. Typically, channel detectors only generate LLRsfor individual data bits. In other words, typical decoders performiterative LDPC decoding in a bit-by-bit process. For example, for agroup of k data bits x₀, x₁, x_(k-1), the initial probabilities (Pr) maybe:

${\log\frac{\Pr\left( {x_{0} = 1} \right)}{\Pr\left( {x_{0} = 0} \right)}},{\log\frac{\Pr\left( {x_{1} = 1} \right)}{\Pr\left( {x_{1} = 0} \right)}},\ldots\mspace{14mu},{\log{\frac{\Pr\left( {x_{k - 1} = 1} \right)}{\Pr\left( {x_{k - 1} = 0} \right)}.}}$

However, the channel detection module 42 generates an initialprobability vector P_(i) for the group x of k correlated data bits,where x=x₀, x_(k-1). For example, the channel detection module 42 maygenerate an initial probability vector P_(i) of length 2^(k)−1 thatincludes LLRs for each of the sequences of k correlated data bits:

$P_{i} = {\begin{bmatrix}{\log\frac{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 01}} \right)}{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 00}} \right)}} \\{\log\frac{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 10}} \right)}{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 00}} \right)}} \\{\log\frac{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 11}} \right)}{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 00}} \right)}} \\\vdots \\{\log\frac{\Pr\left( {x = {1\mspace{14mu}\ldots\mspace{14mu} 11}} \right)}{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 00}} \right)}}\end{bmatrix}.}$

Each entry of the initial probability vector P_(i) is measured againstan all-zero sequence x=0 . . . 00. The all-zero sequence entry may beomitted as an entry in the initial probability vector P_(i) becausemeasuring the all-zero sequence against the all-zero sequence istrivial:

${\log\frac{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 00}} \right)}{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 00}} \right)}} = 0.$

The initial probability vector P_(i) may be combined with a feedbackprobability vector P_(f) to generate an updated probability vectorP_(u). However, for the first decoding iteration P_(f)=0 because adecoding module 54 has not generated feedback signals P_(f)(x) yet.Therefore, P_(u)=P_(i) for the first decoding iteration.

An estimation module 52 generates initial bit estimations P_(e)(x₀),P_(e)(x₁) . . . , P_(e)(x_(k-1)) (collective referred to as initial bitestimations P_(e)(x)) based on the updated probability vector P_(u). Forexample, the estimation module 52 may generate the initial bitestimations P_(e)(x) as follows:

${{P_{e}\left( x_{i} \right)} = {{\log\frac{\Pr\left( {x_{i} = 1} \right)}{\Pr\left( {x_{i} = 0} \right)}} = {\log\frac{\sum\limits_{a_{i} = 1}{\Pr\left( {x = a} \right)}}{\sum\limits_{a_{i} = 0}{\Pr\left( {x = a} \right)}}}}},{{P_{e}\left( x_{i} \right)} \approx {{\max\limits_{a_{i} = 1}\left( {P_{u}(a)} \right)} - {\max\limits_{a_{i} = 0}\left( {P_{u}(a)} \right)}}},$where α_(i) represents a binary value of the i^(th) entry in thesequence of correlated data bits x. P_(u)(a_(i)) represents entries ofthe updated probability vector P_(u). The first line of the aboveformula may be used to generate exact initial bit estimations P_(e)(x).However, to reduce overall complexity the initial bit estimationsP_(e)(x) may be generated based on the second line of the above formula.

The bit estimations P(x) to be used by the decoding module 54 may begenerated by subtracting the feedback signals P_(f)(x) from the initialbit estimations P_(e)(x). However, for the first decoding iterationP_(f)(x)=0. Therefore, the decoding module 54 receives the bitestimations P(x), which for this iteration are the initial bitestimations P_(e)(x).

The decoding module 54 receives the bit estimations P(x). The decodingmodule 54 may generate an estimate signal (r) based on the bitestimations P(x) if a predetermined condition has been satisfied. Thecondition may require, for example, that a predetermined number ofdecoding iterations occur or that all parity-check equations besatisfied. If the condition is satisfied, the decoding module 46 mayoutput the estimate signal. For example, the estimate signal may be mostprobable datawords, or the original stream of datawords (u) if no errorexists.

If the predetermined condition is not satisfied, the decoding module 54generates the feedback signals P_(f)(x) for each of the k data bits. Thefeedback signals P_(f)(x) may be generated based on typicalmessage-passing decoding between variable and check nodes.

For example, a feedback signal P_(f)(x) for a data bit may be a sum ofcheck node messages received at a variable node corresponding to thedata bit. More specifically, a feedback signal P_(f)(x_(i)) may becomputed for a bit x_(i) by summing messages from check nodes to avariable node corresponding to data a bit (v). In one implementation, ifα₀, . . . , α_(k-1) represent the messages from k check nodes to thevariable node corresponding to the data bit, then the feedback signalfor the data bit is:P _(j)(ν)=α₀+ . . . +α_(k-1).

The decoding module 46 sends the feedback signals P_(f)(x) to thecomputation module 44 to be used in another decoding iteration. Anupdating module 56 receives the feedback signals P_(f)(x) and generatesthe feedback probability vector P_(f) based on the feedback signalsP_(f)(x). For example, the updating module 56 may generate the feedbackprobability vector P_(f) as follows, where each entry of the feedbackprobability vector P_(f) corresponds to a bit sequence on the right:

$P_{f} = {\begin{bmatrix}{P_{f}\left( x_{0} \right)} \\{P_{f}\left( x_{1} \right)} \\{{P_{f}\left( x_{0} \right)} + {P_{f}\left( x_{1} \right)}} \\{P_{f}\left( x_{2} \right)} \\\vdots \\{{P_{f}\left( x_{k - 2} \right)} + \ldots + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}} \\{P_{f}\left( x_{k - 1} \right)} \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{0} \right)}} \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}} \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{2} \right)}} \\\vdots \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{k - 2} \right)} + \ldots + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}}\end{bmatrix}{\begin{matrix}\rightarrow & {00\mspace{14mu}\ldots\mspace{14mu} 001} \\\rightarrow & {00\mspace{14mu}\ldots\mspace{14mu} 010} \\\rightarrow & {00\mspace{14mu}\ldots\mspace{14mu} 011} \\\rightarrow & {00\mspace{14mu}\ldots\mspace{14mu} 100} \\\rightarrow & \vdots \\\rightarrow & {01\mspace{14mu}\ldots\mspace{14mu} 011} \\\rightarrow & {10\mspace{14mu}\ldots\mspace{14mu} 000} \\\rightarrow & {10\mspace{14mu}\ldots\mspace{14mu} 001} \\\rightarrow & {10\mspace{14mu}\ldots\mspace{14mu} 011} \\\rightarrow & {10\mspace{14mu}\ldots\mspace{14mu} 100} \\\rightarrow & \vdots \\\rightarrow & {11\mspace{14mu}\ldots\mspace{14mu} 111}\end{matrix}.}}$

The updated probability vector P_(u) may be generated based on theinitial probability vector P₁ and the feedback probability vector P_(f).For example, the updated probability vector P_(u) may be generated bysumming the initial probability vector P_(i) and the feedbackprobability vector P_(f) (P_(u)=P_(i)+P_(f)).

The estimation module 52 may generate new initial bit estimationsP_(e)(x) based on the updated probability vector P_(u). For example, theestimation module 52 may generate the new initial bit estimationsP_(e)(x) based on the same method used in the first decoding iteration(above).

New bit estimations P(x) for a new decoding cycle may then be generatedbased on the new initial bit estimations P_(e)(x) and the feedbacksignals P_(f)(x). For example, the new bit estimations P(x) may begenerated by subtracting the feedback signals P_(f)(x) from thecorresponding new initial bit estimations P_(e)(x):P(x)=P _(e)(x)−P _(f)(x).

The decoding module 54 receives the new bit estimations P(x). Thedecoding module 54 may generate and output the estimate signal based onthe new bit estimations P(x) if the predetermined condition has beensatisfied. If the predetermined condition has not been satisfied, thedecoding module 54 may generate new feedback signals P_(f)(x) and theprocess may repeat for another decoding iteration.

Referring now to FIG. 5, a communication system 60 is shown. Thecommunication system may include an encoder 62, a modulator 64, acommunication channel 66, a demodulator 68, and a parallel iterativedecoding module 70. For example, the communication system 60 may encodeand/or decode data using low-density parity-check (LDPC) codes andtechniques.

The encoder 62 encodes a stream of datawords (u) from a source using acode (C) such as an LDPC code. A dataword may refer to a group of binarydata that is suitable for input to the encoder 62. The encoder 62outputs a stream of codewords (c) which may be in the form of binarydata. A codeword may refer to a group of bits generated by the encoder62 based on an input dataword.

The modulator 64 modulates the frequency, amplitude, and/or phase of thestream of codewords (c) to generate a transmitted signal (w), such as acommunication or storage signal. The channel 66 may be a storage medium,such as a magnetic storage medium, an optical storage medium, or anelectrical storage medium. The channel 66 may also be a communicationchannel.

The channel 66 provides a received signal (w′), which may be a corruptedversion of the transmitted signal due to noise (n) or interference. Thedemodulator 68 demodulates the received signal and provides an initialestimate signal (r′) of the stream of codewords.

The parallel iterative decoding module 70 receives the initial estimatesignal. The initial estimate signal may include corrupted bits. Theparallel iterative decoding module 70 may group the initial estimatesignal into b groups of correlated data bits. The parallel iterativedecoding module 70 may generate soft information, such as LLRs, based onthe b groups of correlated data bits.

For example, the parallel iterative decoding module 70 may generate softinformation based on the Viterbi algorithm. The parallel iterativedecoding module 70 may also generate the soft information based onchannel factors such as the type of modulation used by the modulator 64and channel parameters such as additive white Gaussian noise (AWGN).

The parallel iterative decoding module 70 may decode more than one ofthe b groups concurrently. Additionally, the parallel iterative decodingmodule 70 may decode groups of different sizes (or lengths), up to kbits each. Thus, the parallel iterative decoding module 70 may be fasterthan and may provide a higher bit-throughput than typical bit-by-bitdecoders. The parallel iterative decoding module 70 may also achieve aconstant bit-throughput for different sizes of groups by interleavingthe received data bits and disabling adders used in processing.

The parallel iterative decoding module 70 generates an estimate signal(r). For example, the parallel iterative decoding module 70 may generatethe estimate signal by combining b group estimate signals r₀, r₁, . . ., r_(b-1) corresponding to the b groups of correlated information bits.The estimate signal represents an estimate of the original stream ofdatawords (u) after encoding, transmission, and decoding. In oneimplementation, the estimate signal represents an estimate of theoriginal stream of datawords because the original stream of data wordsmay be corrupted due to channel noise. For example, the estimate signalr may be most probable datawords, or it may be the same as the originalstream of datawords u if no error exists.

Referring now to FIG. 6, a functional block diagram of a paralleliterative decoding module 70 is shown. The parallel iterative decodingmodule 70 may include b parallel channel detection modules 80-1, 80-2, .. . , 80-b (collectively referred to as channel detection modules 80).The parallel iterative decoding module 70 may also include a decodingcontrol system 90, hereinafter referred to as computation control module90. The parallel iterative decoding module 70 may further include bparallel decoding modules 100-1, 100-2, . . . 100-b (collectivelyreferred to as decoding modules 100).

The channel detection modules 80 receive the initial estimate signal(r′) from a channel via a demodulator (not shown). The channel detectionmodules 80 may group the initial estimate signal into b groups of up tok correlated bits each. The maximum number of bits k per group b may bebased on a number of adders and/or multiplexers in the channel detectionmodules 80, the computation control module 90, and the decoding modules100.

The channel detection modules 80 may also include soft-output Viterbialgorithm (SOVA) detectors. The channel detection modules 80 generatesoft information based on the b groups of correlated data bits. Forexample, the channel detection modules 80 may generate LLRs based onsequences of correlated data bits within each of the b groups.

In one implementation, the channel detection modules 80 generate binitial probability vectors P_(i,0), P_(0,1), . . . , P_(i,b-1)(collectively referred to as initial probability vectors P_(i)). Theinitial probability vectors may include LLRs for each possible sequenceof bits within each of the b groups. In one implementation, each of theinitial probability vectors P_(i) may correspond to one of the b groupsof bits. For example, each of the initial probability vectors P_(i) maybe of length 2^(k)−1, where k is the maximum number of bits per group b:

$P_{i} = {\begin{bmatrix}{\log\frac{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 01}} \right)}{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 00}} \right)}} \\{\log\frac{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 10}} \right)}{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 00}} \right)}} \\{\log\frac{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 11}} \right)}{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 00}} \right)}} \\\vdots \\{\log\frac{\Pr\left( {x = {1\mspace{14mu}\ldots\mspace{14mu} 11}} \right)}{\Pr\left( {x = {0\mspace{14mu}\ldots\mspace{14mu} 00}} \right)}}\end{bmatrix}.}$

The computation control module 90 receives the initial probabilityvectors P_(i). The computation control module 90 also receives b×kfeedback signals P_(f)(x_(0,0)), P_(f)(x_(0,1)), . . . ,P_(f)(x_(b-1,k-1)) (collectively referred to as feedback signalsP_(f)(x)) from the decoding modules 100. The computation control module90 generates bxk bit estimations P(x_(0.0)), P(x_(0,1)), . . . ,P(x_(b-1,k-1)) (collectively referred to as bit estimations P(x))corresponding to each of the k bits in each of the b groups. Thecomputation control module 90 may generate the bit estimations P(x)based on the initial probability vectors P_(i) and the feedback signalsP_(f)(x).

The decoding modules 100 receive the bit estimations P(x) from thecomputation control module 90. For example, decoding module 100-0 mayreceive bit estimations P(x_(0,0))−P(x_(0,k-1)) corresponding to each ofthe k bits in a first group (i.e., group 0). The decoding modules 100may further include LDPC decoders. The decoding modules 100 may generatethe b group estimate signals r₀, r₁, r_(b-1) based on the bitestimations P(x) if conditions have been satisfied. For example, thedecoding modules 100 may generate the b group estimate signals if acertain number of decoding iterations have occurred or if allparity-check equations are satisfied.

If the conditions are not satisfied, the decoding modules 100 maygenerate the feedback signals P_(f)(x). The decoding modules 100 maygenerate the feedback signals P_(f)(x) based on the bit estimations P(x)and a typical message-passing decoding process between nodes. Forexample, the decoding modules 100. The decoding modules 100 may send thefeedback signals P_(f)(x) back to the computation control module 90 tobe used in another decoding iteration. This iterative decoding processmay be repeated until the conditions are satisfied.

Referring now to FIG. 7A, a first embodiment of the computation controlmodule 150 is shown. The computation control module 150 may groundsignals and/or probability vector entries. For example, groundingsignals and/or probability vector entries may prevent unused adders forgroups of less than k bits in size from affecting probabilitycomputation (and thus decoding). Thus, the computation control module150 may provide for processing of a constant number of groups b of up tok bits each.

The computation control module 150 may include b parallel updatingmodules 160-1, 160-2, . . . , 160-b (collectively referred to asupdating modules 160). The computation control module 150 may alsoinclude b parallel reference modules 170-1, 170-2, . . . , 170-b(collectively referred to as reference modules 170). The computationcontrol module 150 may further include b parallel estimation modules180-1, 180-2, . . . , 180-b (collectively referred to as estimationmodules 180).

Furthermore, one of the updating modules 160 and one of the estimationmodules 180 may collectively be referred to as a computation module (asseen previously in FIG. 4B). For example, updating module 160-b andestimation module 180-b may be referred to collectively as computationmodule b (i.e., the b^(th) computation module). Each computation modulemay process up to k bits per cycle.

The updating modules 160 receive respective initial probability vectorsP_(i) and the feedback signals P_(f)(x). For example, updating module160-1 may receive initial probability vector P₀ and feedback signalsP_(f)(x_(0,0))−P_(f)(x_(0,k-1)). In one implementation, updating module160-1 may receive feedback signals corresponding to each of the bits inthe first group (i.e., group 0).

The updating modules 160 generate b feedback probability vectorsP_(f,0), P_(f,1) . . . , P_(f,b-1) (collectively referred to as feedbackprobability vectors P_(f)) based on the feedback signals P_(f)(x). Forexample, for a group of k bits:

$P_{f} = \begin{bmatrix}{P_{f}\left( x_{0} \right)} \\{P_{f}\left( x_{1} \right)} \\{{P_{f}\left( x_{0} \right)} + {P_{f}\left( x_{1} \right)}} \\{P_{f}\left( x_{2} \right)} \\\vdots \\{{P_{f}\left( x_{k - 2} \right)} + \ldots + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}} \\{P_{f}\left( x_{k - 1} \right)} \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{0} \right)}} \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}} \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{2} \right)}} \\\vdots \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{k - 2} \right)} + \ldots + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}}\end{bmatrix}$

However, for groups of bits of size less than k, computation of the bitestimations P(x) may be modified as follows:

${{P\left( x_{i} \right)} = {{\log\frac{\sum\limits_{a_{i} = 1}{P\left( {x_{1}^{k} = a_{1}^{k}} \right)}}{\sum\limits_{a_{i} = 0}{P\left( {x_{1}^{k} = a_{1}^{k}} \right)}}} = {\log\frac{{\sum\limits_{{a_{i} = 1},{a_{m} = 0}}{P\left( {x_{1}^{k} = a_{1}^{k}} \right)}} + {\sum\limits_{{a_{i} = 1},{a_{m} = 1}}{P\left( {x_{1}^{k} = a_{1}^{k}} \right)}}}{{\sum\limits_{{a_{i} = 0},{a_{m} = 0}}{P\left( {x_{1}^{k} = a_{1}^{k}} \right)}} + {\sum\limits_{{a_{i} = 0},{a_{m} = 1}}{P\left( {x_{1}^{k} = a_{1}^{k}} \right)}}}}}},{\approx {{\max\left( {{\max\left( {\underset{{a_{i} = 1},{a_{m} = 0}}{P_{u}}\left( a_{1}^{k} \right)} \right)},{\max\left( {\underset{{a_{i} = 1},{a_{m} = 1}}{P_{u}}\left( a_{1}^{k} \right)} \right)}} \right)} - {\max\left( {{\max\left( {\underset{{a_{i} = 0},{a_{m} = 0}}{P_{u}}\left( a_{1}^{k} \right)} \right)},{\max\left( {\underset{{a_{i} = 0},{a_{m} = 1}}{P_{u}}\left( a_{1}^{k} \right)} \right)}} \right)}}},$where α_(l) ^(k) represents the following vector:

$a_{1}^{k} = {\begin{bmatrix}a_{0} \\a_{1} \\\vdots \\a_{k - 1}\end{bmatrix}.}$

Thus, the updating modules 160 may selectively ground (i.e., set tozero) one or more feedback signals P_(f)(x) to support processing ofgroup sizes less than k bits. For example, the updating modules 160 maycommunicate with the reference modules 170, and the reference modules170 may selectively set one or more feedback signals to a referencevoltage, such as ground.

For example, for processing of groups of size k−1 the updating modules160 may communicate with the reference modules 170 to ground a vector offeedback signals P_(f)(x_(0-(b-1),k-1)) (i.e., the k^(th) entry of eachgroup). In one implementation, the reference modules 170 may effectivelyset the feedback signals P_(f)(x) corresponding to the k^(th) bit tozero. Thus, the feedback probability vectors P_(f) may be generatedbased on these modified feedback signals P_(f)(x).

The updating modules 160 may then generate updated probability vectorsP_(u,0), P_(u,1), . . . , P_(u,b-1) (collectively referred to as updatedprobability vectors P_(u)). For example, the updating modules 160 maygenerate the updated probability vectors P_(u) by summing the initialprobability vectors P_(i) with the corresponding feedback probabilityvectors P_(f) (P_(u)=P_(i)+P_(f)).

The estimation modules 180 receive the updated probability vectorsP_(u). If the computation control module 150 is processing groups of kbits each, then the estimation modules 180 may not modify the updatedprobability vectors P_(u). However, if the computation control module150 is processing groups of less than k bits each (i.e., k−1, k−2), thenthe estimation modules 180 may communicate with the reference modules170 to modify the updated probability vectors P_(u).

For example, the reference modules 170 may ground half or more of theentries in each of the updated probability vectors P_(u). If thecomputation control module 150 is processing groups of size k−1, thereference modules 170 may ground the last half of the entries of theupdated probability vectors P_(u). In one implementation, the referencemodules 170 may zero the entries of the updated probability vectorsP_(u) corresponding to the k^(th) bit being 1.

Grounding one or more vectors of feedback signals P_(f)(x) and half ormore entries of the updated probability vectors P_(u) may result in thefollowing:

${{\underset{{a_{i} = 1},{a_{k} = 1}}{P_{u}}\left( a_{1}^{k} \right)} = 0},{{\underset{{a_{i} = 0},{a_{k} = 1}}{P_{u}}\left( a_{1}^{k} \right)} = 0},{{\underset{{a_{i} = 1},{a_{k} = 0}}{P_{u}}\left( a_{1}^{k} \right)} = {\underset{a_{i} = 1}{P_{u}}\left( a_{1}^{k - 1} \right)}},{{\underset{{a_{i} = 0},{a_{k} = 0}}{P_{u}}\left( a_{1}^{k} \right)} = {{\underset{a_{i} = 0}{P_{u}}\left( a_{1}^{k - 1} \right)}.}}$

Thus, the outputs of the estimation modules 180 areP(x_(i))=P_(e)(x_(i))−P_(f)(x_(i)), where P_(e)(x_(i)) may be generatedas follows:

${P_{e}\left( x_{i} \right)} \approx {{\max\left( {\underset{a_{i} = 1}{P_{u}}\left( a_{1}^{k - 1} \right)} \right)} - {{\max\left( {\underset{a_{i} = 0}{P_{u}}\left( a_{1}^{k - 1} \right)} \right)}.}}$

Further support for decreasing group sizes (e.g., k−2, k−3, etc.) may beachieved by grounding additional vectors of the feedback signalsP_(f)(x) and additional updated probability vector P_(u) entriescorresponding to unused adders. In one implementation, each decrement ofgroup size uses approximately half of the adders of a computationmodule.

Referring now to FIG. 7B, a flow diagram illustrating steps performed bythe first embodiment of the computation control module 150 begins instep 200. In step 202, the computation control module 150 determines thesizes of the b groups being processed. If the size is k (i.e., themaximum), control proceeds to step 204. If the size is less than k,control proceeds to step 210.

In step 204, the computation control module 150 begins processing the bgroups of k bits using an entire 2^(k)−1 vector operations (i.e., alladders of the computation modules). The computation control module 150generates the feedback probability vectors P_(f) based on the feedbacksignals P_(f)(X).

In step 206, the computation control module 150 generates the updatedprobability vectors P_(u) based on the initial probability vectors P_(i)and the feedback probability vectors P_(f). In step 208, the computationcontrol module 150 generates the bit estimations P(x) based on theupdated probability vectors P_(u) and control ends.

In step 210, the computation control module 150 determines thedifference d between k and the number of bits in each of the b groups.In step 212, the computation control module 150 grounds one or morevectors of feedback signals P_(f)(x) based on d. For example, if d=1(i.e., group size k−1) then the computation control module 150 mayground the vector of feedback signals P_(f)(x_(k-1)) which correspondsto the k^(th) bit for each of the b groups.

In step 214, the computation control module 150 generates the feedbackprobability vectors P_(f) based on the modified feedback signalsP_(f)(x). In step 216, the computation control module 150 generates theupdated probability vectors P_(u) based on the initial probabilityvectors P_(i) and the feedback probability vectors P_(f).

In step 218, the computation control module 150 grounds half or more ofthe entries of the updated probability vectors P_(u) based on d. Forexample, if d=1 (i.e., group size k−1), the computation control module150 may ground the bottom (i.e., last) half of the entries of theupdated probability vectors P_(u) which correspond to the k^(th) bit. Instep 220, the computation control module 150 generates the bitestimations P(x) based on the updated probability vectors P_(u), andcontrol ends.

Referring now to FIG. 8A, a functional block diagram of a secondembodiment of the computation control module 250 is shown. Thecomputation control module 250 may reuse unused or idling adders forprocessing of multiple groups of less than k bits in size. Furthermore,computation control module 250 may disable unused computation modules inorder to save power. For example, one computation module that mayprocess k bits may also process two groups of k−1 bits by reroutingadders with multiplexers. Thus, the computation control module 250 mayprovide for constant adder utilization.

The computation control module 250 may include a distribution module260. The computation control module 250 may also include b parallelcomputation modules 270-1, 270-2, . . . , 270-b (collectively referredto as computation modules 270). Each of the computation modules 270 mayinclude an updating module 280 and an estimation module 290. Forexample, each of the computation modules 270 may process up to k bitsper cycle. Each of the computation modules 270 may also includemultiplexers (not shown) to reroute adders for processing of multiplegroups of less than k bits in size.

The distribution module 260 receives the b initial probability vectorsP₀, P₁, P_(b-1) (collectively referred to as initial probability vectorsP_(i)). The distribution module 260 also receives the bxk feedbacksignals P_(f)(x_(0,0)), P_(f)(x_(0,1)), . . . , P_(f)(x_(b-1,k-1))(collectively referred to as feedback signals P_(f)(x)). Thedistribution module 260 may distribute the initial probability vectorsP_(i) and the corresponding feedback signals P_(f)(x) to the computationmodules 270 for processing.

However, if the computation control module 250 is processing groups ofless than k bits (i.e., k−1, k−2, etc.), adders in each of thecomputation modules 270 may be rerouted using multiplexers and reused.In one implementation, the computation modules 270 may process more thanone group of less than k bits in one cycle. The computation controlmodule 250 may then disable any unused computation modules 270 afterdistributing the b groups in order to save power.

For example, two groups of k−1 bits may be processed using one of thecomputation modules 270. A feedback probability vector P_(f) may berearranged to illustrate the symmetry that allows for processing of twogroups of k−1 bits:

$P_{f} = {P_{f}^{2k_{- 1}} = {\begin{bmatrix}{P_{f}\left( x_{0} \right)} \\{P_{f}\left( x_{1} \right)} \\{{P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}} \\{P_{f}\left( x_{2} \right)} \\\vdots \\{{P_{f}\left( x_{k - 2} \right)} + \ldots + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}} \\{P_{f}\left( x_{k - 1} \right)} \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{0} \right)}} \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}} \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( {x\; 2} \right)}} \\\vdots \\{{P_{f}\left( x_{k - 1} \right)} + {P_{f}\left( x_{k - 2} \right)} + \ldots + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}}\end{bmatrix} = {\quad{\left\lbrack \begin{matrix}P_{f}^{2^{k - 1} - 1} \\{P_{f}\left( x_{k - 1} \right)} \\{\begin{bmatrix}{P_{f}\left( x_{k - 1} \right)} \\{P_{f}\left( x_{k - 1} \right)} \\\vdots \\{P_{f}\left( x_{k - 1} \right)}\end{bmatrix} + {\quad P_{f}^{2^{k - 1} - 1}}}\end{matrix} \right\rbrack,{P_{f}^{2^{k - 1} - 1} = {\begin{bmatrix}{P_{f}\left( x_{0} \right)} \\{P_{f}\left( x_{1} \right)} \\{{P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}} \\{P_{f}\left( x_{2} \right)} \\\vdots \\{{P_{f}\left( x_{k - 2} \right)} + \ldots + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}}\end{bmatrix}.}}}}}}$

An additional 2^(k)−1 adders are required to evaluate:

$\begin{bmatrix}{P_{f}\left( x_{k - 1} \right)} \\{P_{f}\left( x_{k - 1} \right)} \\\vdots \\{P_{f}\left( x_{k - 1} \right)}\end{bmatrix} + {\quad{P_{f}^{2^{k - 1} - 1}.}}$

In order for one of the computation modules 270 to process k−1 bits, avector of feedback signals P_(f)(x) corresponding to the k^(th) bit maybe grounded. This process was described previously in the firstembodiment of the computation control module 150. Therefore, the 2^(k)−1adders no longer being used may be re-routed using multiplexers toevaluate another group of k−1 bits. In one implementation, a feedbackprobability vector P_(f) may be generated as a combination of two groupsof bits b₀ and b₁:

$P_{f} = {\begin{bmatrix}{P_{f}^{2^{k - 1} - 1}}_{,{b\; 0}} \\0 \\{P_{f}^{2^{k - 1} - 1}}_{,{b\; 1}}\end{bmatrix}.}$

Thus, a corresponding initial probability vector P_(i) may be rearrangedfor vector addition with P_(f) in order to generate an updatedprobability vector P_(u), thus reusing the 2^(k-1) adders that may beiding:

$P_{f} = {\begin{bmatrix}P_{i,{k - 1},{b\; 0}} \\0 \\P_{i,{k - 1},{b\; 1}}\end{bmatrix}.}$

The rearrangement of data may result in partial terms being dividedbetween the two groups b₀ and b₁ when evaluating the bit estimationsP(x):

${\max\left( {\underset{{a_{i} = 1},{a_{k} = 0}}{P_{u}}\left( a_{1}^{k} \right)} \right)}\left. \middle| {}_{\;} \right._{k}\left. \rightarrow{\max\left( {\underset{{a_{i} = 1},{b\; 0}}{P_{u}}\left( a_{1}^{k - 1} \right)} \right)} \right.\left. \middle| {}_{\;} \right._{k - 1}{\max\left( {\underset{{a_{i} = 1},{a_{k} = 1}}{P_{u}}\left( a_{1}^{k} \right)} \right)}\left. \middle| {}_{\;} \right._{k}\left. \rightarrow{\max\left( {\underset{{a_{i} = 1},{b\; 1}}{P_{u}}\left( a_{1}^{k - 1} \right)} \right)} \right.\left. \middle| {}_{\;} \right._{k - 1}{\max\left( {\underset{{a_{i} = 0},{a_{k} = 0}}{P_{u}}\left( a_{1}^{k} \right)} \right)}\left. \middle| {}_{\;} \right._{k}\left. \rightarrow{\max\left( {\underset{{a_{i} = 0},{b\; 0}}{P_{u}}\left( a_{1}^{k - 1} \right)} \right)} \right.\left. \middle| {}_{\;} \right._{k - 1}{\max\left( {\underset{{a_{i} = 0},{a_{k} = 1}}{P_{u}}\left( a_{1}^{k} \right)} \right)}\left. \middle| {}_{\;} \right._{k}\left. \rightarrow{\max\left( {\underset{{a_{i} = 0},{b\; 1}}{P_{u}}\left( a_{1}^{k - 1} \right)} \right)} \right.\left. \middle| {}_{\;} \right._{k - 1}.$

Additionally, a comparator used to evaluate max[max(P_(u0),P_(u2))|_(k)−max(P_(u4), P_(u6))|_(k)] may be re-routed to evaluate[max(P_(u0), P_(u2))−max(0, P_(u1))]|_(k-1). The same strategy may beapplied for evaluating other bit estimations P(x) for both groups b₀ andb₁. The number of bits processed per cycle (i.e., the number of bitestimations P(x) generated) may approximately double for every integerdecrement in group size. In other words,b×k|_(k)˜2b×k−2b|_(k-1)˜4b×k−8b|_(k-2).

Referring now to FIG. 8B, an exemplary adder and multiplexerconfiguration of an updating module 280 (i.e., part of a computationmodule) that may process both k=3 bits and two sets of k−1=2 bits isshown. The updating module 280 may generate a feedback probabilityvector P_(f) for either sized group. The multiplexers 292, 294, 296enable and/or disable (i.e., reroute) adders based on whether one groupof k=3 bits or two groups of k−1=2 bits are being processed.

For example, a low (e.g., 0) multiplexer control enables processing forone group of k=3 bits. The updating module 280 may set P_(f)(x_(0,0)) toP_(f)(x₀), P_(f)(x_(0,1)) to P_(f)(x₁), P_(f)(x_(0,2)) to P_(f)(x₂), andthus may not use P_(f)(x_(0,3)):

${P_{f,{k = 3}} = {P_{f}^{2^{2} - 1} = \begin{bmatrix}{P_{f}\left( x_{0} \right)} \\{P_{f}\left( x_{1} \right)} \\{{P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}} \\{P_{f}\left( x_{2} \right)} \\{{P_{f}\left( x_{2} \right)} + {P_{f}\left( x_{0} \right)}} \\{{P_{f}\left( x_{2} \right)} + {P_{f}\left( x_{1} \right)}} \\{{P_{f}\left( x_{2} \right)} + {P_{f}\left( x_{1} \right)} + {P_{f}\left( x_{0} \right)}}\end{bmatrix}}},$

For example, a high (e.g., 1) multiplexer control enables processing fortwo groups of k−1=2 bits. Thus, the updating module 280 effectively setsthe following inputs:

$\begin{matrix}{{P_{f}\left( x_{0} \right)} = {P_{f}\left( x_{0,{b\; 0}} \right)}} \\{{P_{f}\left( x_{1} \right)} = {P_{f}\left( x_{1,{b\; 0}} \right)}} \\{{P_{f}\left( x_{2} \right)} = {P_{f}\left( x_{0,{b\; 1}} \right)}} \\{{{P_{f}\left( x_{3} \right)} = {P_{f}\left( x_{0,{b\; 1}} \right)}},}\end{matrix}\mspace{14mu}\begin{matrix}{{P_{i}\left( x_{0} \right)} = P_{{i\; 0},{b\; 0}}} \\{{P_{i}\left( x_{1} \right)} = P_{{i\; 1},{b\; 0}}} \\{{P_{i}\left( x_{2} \right)} = P_{{i\; 2},{b\; 0}}} \\{{P_{i}\left( x_{3} \right)} = 0} \\{{P_{i}\left( x_{4} \right)} = P_{{i\; 0},{b\; 1}}} \\{{P_{i}\left( x_{5} \right)} = P_{{i\; 1},{b\; 1}}} \\{{P_{i}\left( x_{6} \right)} = {P_{{i\; 2},{b\; 1}}.}}\end{matrix}$

Therefore, the updating module 280 may rearrange initial probabilityvector P_(i) and feedback probability vector P_(f) for vector additionto generate P_(u) for two groups of k−1=2 bits:

$\mspace{79mu}{{P_{f,{{k - 1} = 2_{,{b\; 0},{b\; 1}}}} = {\begin{bmatrix}P_{f,{{k - 1} = 2_{,{b\; 0}}}} \\0 \\P_{f,{{k - 1} = 2_{,{b\; 1}}}}\end{bmatrix} = \begin{bmatrix}{P_{f}\left( x_{0,{b\; 0}} \right)} \\{P_{f}\left( x_{1,{b\; 0}} \right)} \\{{P_{f}\left( x_{1,{b\; 0}} \right)} + {P_{f}\left( x_{0,{b\; 0}} \right)}} \\0 \\{P_{f}\left( x_{0,{b\; 1}} \right)} \\{P_{f}\left( x_{1,{b\; 1}} \right)} \\{{P_{f}\left( x_{1,{b\; 1}} \right)} + {P_{f}\left( x_{0,{b\; 1}} \right)}}\end{bmatrix}}},{P_{u,{{k - 1} = 2},_{b\; 0},{b\; 1}} = {{P_{f,{{k - 1} = 2},_{{b\; 0},{b\; 1}}} + P_{i,{{k - 1} = 2},_{{b\; 0},{b\; 1}}}} = {\begin{bmatrix}{P_{f}\left( x_{0,{b\; 0}} \right)} \\{P_{f}\left( x_{1,{b\; 0}} \right)} \\{{P_{f}\left( x_{1,{b\; 0}} \right)} + {P_{f}\left( x_{0,{b\; 0}} \right)}} \\0 \\{P_{f}\left( x_{0,{b\; 1}} \right)} \\{P_{f}\left( x_{1,{b\; 1}} \right)} \\{{P_{f}\left( x_{1,{b\; 1}} \right)} + {P_{f}\left( x_{0,{b\; 1}} \right)}}\end{bmatrix} + {\begin{bmatrix}P_{{i\; 0},{b\; 0}} \\\begin{matrix}P_{{i\; 1},{b\; 0}} \\P_{{i\; 2},{b\; 0}} \\0 \\P_{{i\; 0},{b\; 1}} \\P_{{i\; 1},{b\; 1}} \\P_{{i\; 2},{b\; 1}}\end{matrix}\end{bmatrix}.}}}}}$

Referring now to FIG. 8C, a flow diagram illustrating steps performed bythe second embodiment of the computation control module 250 begins instep 300. In step 302, the computation control module 250 determines thesize of the b groups being processed. If the size is the maximum size k,control proceeds to step 304. If the size is less than k, controlproceeds to step 310.

In step 304, the computation control module 250 begins processing the bgroups of k bits using an entire 2^(k)−1 vector operations (i.e., alladders of the computation modules). The computation control module 250generates the feedback probability vectors P_(f) based on the feedbacksignals P_(f)(X).

In step 306, the computation control module 250 generates the updatedprobability vectors P_(u) based on the initial probability vectors P_(i)and the feedback probability vectors P_(f). In step 308, the computationcontrol module 250 generates the bit estimations P(x) based on theupdated probability vectors P_(u) and control ends.

In step 310, the computation control module 250 determines thedifference d between k and the number of bits in each of the b groups.In step 312, the computation control module 250 distributes the b groupsto the computation modules for processing based on d. For example, ifd=1 (i.e., group size k−1) then the computation control module 250 maydistribute two k−1 groups each one computation module to be processedconcurrently.

In step 314, the computation control module 250 disables any unusedcomputation modules. For example, disabling unused computation modulesmay save power. In step 316, the computation control module 250generates the feedback probability vectors P_(f) based on the feedbacksignals P_(f)(X).

In step 318, the computation control module 250 generates the updatedprobability vectors P_(u) based on the initial probability vectors P_(i)and the feedback probability vectors P_(f). In step 320, the computationcontrol module 250 generates the bit estimations P(x) based on theupdated probability vectors P_(u), and control ends.

Referring now to FIG. 9A, a functional block diagram of a thirdembodiment of the computation control module 350 is shown. Thecomputation control module 350 may interleave and redistribute bits forprocessing to different computation modules based on the group sizesbeing processed. Furthermore, the computation control module 350 maydisable unused computation modules in order to save power. Thus, thecomputation control module 350 may provide for a constant number of bitsto be processed per cycle (i.e., a constant bit-throughput).

The computation control module 350 may include an interleaving module360. The computation control module 350 may also include b parallelcomputation modules 370-1, 370-2, . . . , 370-b (collectively referredto as computation modules 370). For example, each of the computationmodules 370 may include an updating module 380 and an estimation module390. The computation control module 350 may further include adeinterleaving module 400.

To achieve a constant bit-throughput and/or to use the same interleavingmodule 360 and deinterleaving module 400 to support of both k and k−1bits, a constraint may be necessary:b _(k) ×k=2×b _(k-1)×(k−1).b_(k) represents a number of computation modules 370 processing b groupsof k bits each. b_(k-1) represents a number of computation modules 370processing b groups of k−1 bits each. k is the maximum numbers of bitsthat may be processed by each of the computation modules 370 per cycle.

For example, four computation modules 370 may be used to process threebits each (b_(k)=4, k=3) and the three of those four computation modules370 may be used to process two groups of two bits each (b_(k-1)=3). Inother words, 4×3=2×3×2 (i.e., 12=12), and the constraint is satisfied.

The interleaving module 360 may receive feedback signals P_(f)(x_(0,0)),P_(f)(x_(0,1)), . . . , P_(f)(x_(b-1,k-1)) (collectively referred to asfeedback signals P_(f)(x)) corresponding to each of the k bits in eachof the b groups. The interleaving module 360 may perform interleaving onthe received data P_(f)(x). Interleaving is a process of rearranging thebits of a signal that may be used to improve error correction.

For example, errors that occur in a transmission may tend to be focusedover a span of a few bits and therefore may be referred to as a bursterror. Thus, by interleaving the received signal, there may be a higherprobability that all the incorrect bits may be corrected, as compared toa probability of consecutive incorrect bits being corrected.

In one implementation, the interleaving module 360 may rearrange thereceived data and may output the data in a non-linear way. For example,the interleaver may receive P_(f)(x_(0,0)), P_(f)(x_(0,1)),P_(f)(x_(0,2)) and output P_(f)(x_(0,2)), P_(f)(x_(0,0)), andP_(f)(x_(0,1)), in those orders. Therefore, if bits 2 and 3 (x_(0,1) andx_(0,2), respectively) are incorrect, there may be a higher probabilityof correcting the bits because the bits are no longer grouped together(e.g., consecutively).

The interleaving module 360 may output the feedback signals P_(f)(x)after interleaving. However, if the computation control module 350 isprocessing groups of less than k bits in size, the interleaving module360 may re-route some feedback signals P_(f)(x) to other computationmodules 370. In one implementation, if a computation module 370 isprocessing two groups of k−1 bits, the corresponding feedback signalsP_(f)(x) for that second group of k−1 bits may be rerouted. Afterre-routing data, any computation modules 370 that are not being used maybe disabled. For example, disabling unused computation modules 370 maysave power.

The computation modules 370 generate bit estimations P(x) based on the bgroups of bits as shown in previous implementations. The computationcontrol module 350 may reroute the bit estimations P(x) beforedeinterleaving. The deinterleaving module 400 receives the bitestimations P(x). The deinterleaving module 400 may output the bitestimations P(x) in a correct linear sequence (i.e., in order) afterdeinterleaving. Deinterleaving is an inverse process of interleaving. Inone implementation, the deinterleaving module 400 may receiveP(x_(0,2)), P(x_(0,0)), P(x_(0,1)) and output P(x_(0,0)), P(x_(0,1)),P(x_(0,2)), in those orders.

Referring now to FIG. 9B, an exemplary configuration of the thirdembodiment of the computation control module 450 is shown. Thecomputation control module 450 includes an interleaving module 460, fourcomputation modules 470-1, 470-2, 470-3, 470-4 (collectively referred toas computation modules 470), and a deinterleaving module 480. Forexample, each computation module 470 may include an updating module 490and an estimation module 500.

In one implementation, the computation control module 450 may achieve aconstant 12 bit-throughput. In other words, the computation controlmodule 450 may process 12 bits per cycle. For example, the computationcontrol module may process correlated bit groups of size k=3 and k−1=2.

If the computation control module 450 is processing groups of size k=3,each of the computation modules 470 may process a full k bits each.However, if the computation control module 450 is processing groups ofsize k−1 (i.e., k−1=2), computation modules 470-1, 470-2, and 470-3 mayeach process two groups of two bits each.

The computation control module 450 may then disable computation module470-4. For example, disabling computation module 470-4 may save power.However, the computation control module 450 may re-route the feedbacksignals P_(f)(x) from computation module 470-4 to computation modules470-1, 470-2, 470-3 that are now processing the corresponding bit(s).

The computation modules 470-1, 470-2, and 470-3 generate the bitestimations P(x). The computation control module 450 may reroute the bitestimations P(x) before deinterleaving. The deinterleaving module 480receives the bit estimations P(x) and deinterleaves them to output thecorrect bit estimations P(x) (i.e., in order).

Referring now to FIG. 9C, a flow diagram illustrating steps performed bythe third embodiment of the computation control module 350 begins instep 550. In step 552, the computation control module 350 determineswhether the constraint has been satisfied. If yes, control proceeds tostep 554. If no, control returns to step 552.

In step 554, the computation control module 350 determines the sizes ofthe b groups being processed. If the size is the maximum size k, controlproceeds to step 556. If the size is less than k, control proceeds tostep 566.

In step 556, the computation control module 350 deinterleaves thefeedback signals P_(f)(x). In step 558, the computation control module350 begins processing the b groups of k bits using an entire 2^(k)−1vector operations (i.e., all adders of the computation modules). Thecomputation control module 350 generates the feedback probabilityvectors P_(f) based on the feedback signals P_(f)(x).

In step 560, the computation control module 350 generates the updatedprobability vectors P_(u) based on the initial probability vectors P_(i)and the feedback probability vectors P_(f). In step 562, the computationcontrol module 350 generates the bit estimations P(x) based on theupdated probability vectors P_(u). In step 564, the computation controlmodule 350 deinterleaves the bit estimations P(x) and control ends.

In step 566, the computation control module 350 determines thedifference d between k and the number of bits in each of the b groups.In step 568, the computation control module 350 interleaves the feedbacksignals P_(f)(x) and distributes the b groups to the computation modulesfor processing based on d. For example, if d=1 (i.e., group size k−1)then the computation control module 350 may distribute two k−1 groups toeach computation module to be processed concurrently.

In step 570, the computation control module 350 reroutes feedbacksignals P_(f)(x) from unused computation modules to the computationmodules processing the corresponding bit(s). The computation controlmodule 350 also disables any unused computation modules. For example,disabling unused computation modules may save power.

In step 572, the computation control module 350 generates the feedbackprobability vectors P_(f) based on the feedback signals P_(f)(x). Instep 574, the computation control module 350 generates the updatedprobability vectors P_(u) based on the initial probability vectors P_(i)and the feedback probability vectors P_(f). In step 576, the computationcontrol module 350 generates the bit estimations P(x) based on theupdated probability vectors P_(u). In step 578, the computation controlmodule 350 reroutes the bit estimations P(x) to the correct inputs ofthe deinterleaving module 480. The computation control module 350 thendeinterleaves the bit estimations P(x) and control ends.

The broad teachings of the disclosure can be implemented in a variety offorms. Therefore, while this disclosure includes particular examples,the true scope of the disclosure should not be so limited since othermodifications will become apparent upon a study of the drawings, thespecification, and the following claims.

What is claimed is:
 1. A communication system, comprising: an encoderconfigured to encode first data words to generate code words; amodulator configured to modulate the code words into a first signal thatis transmitted on a communication channel; a demodulator configured todemodulate a second signal, received from the communication channel,into estimates of the code words, wherein the second signal is based onthe first signal; and a decoding module configured to i) group theestimates of the code words into a plurality of groups of correlateddata bits, wherein the correlated data bits include statisticalrelationships between different data bits, ii) generate a plurality ofgroup estimate signals each corresponding to a respective one of theplurality of groups of correlated data bits, and iii) generate, bycombining the plurality of group estimate signals, an estimate signalcorresponding to the first data words.
 2. The communication system ofclaim 1, wherein the second signal corresponds to the first signalcorrupted by noise or interference.
 3. The communication system of claim1, wherein the decoding module is configured to generate the pluralityof group estimate signals by decoding the plurality of groups ofcorrelated data bits.
 4. The communication system of claim 1, whereinthe decoding module is configured to generate the plurality of groupestimate signals by generating soft decoding information based on theplurality of groups of correlated data bits.
 5. The communication systemof claim 4, wherein the soft decoding information includes loglikelihood ratios.
 6. The communication system of claim 1, wherein thedecoding module is configured to generate the plurality of groupestimate signals by generating a plurality of probability vectorscorresponding to respective ones of the plurality of groups ofcorrelated data bits, wherein the plurality of probability vectorsincludes probabilities that each of the correlated data bits has arespective value.
 7. The communication system of claim 1, wherein thedecoding module is configured to generate the plurality of groupestimate signals by decoding two or more of the plurality of groups ofcorrelated data bits concurrently.
 8. The communication system of claim1, wherein one or more of the plurality of groups of correlated databits has a different size than others of the plurality of groups ofcorrelated data bits.
 9. A method of operating a communication system,the method comprising: encoding first data words to generate code words;modulating the code words into a first signal that is transmitted on acommunication channel; demodulating a second signal, received from thecommunication channel, into estimates of the code words, wherein thesecond signal is based on the first signal; grouping the estimates ofthe code words into a plurality of groups of correlated data bits,wherein the correlated data bits include statistical relationshipsbetween different data bits; generating a plurality of group estimatesignals each corresponding to a respective one of the plurality ofgroups of correlated data bits; and generating, by combining theplurality of group estimate signals, an estimate signal corresponding tothe first data words.
 10. The method of claim 9, wherein the secondsignal corresponds to the first signal corrupted by noise orinterference.
 11. The method of claim 9, further comprising generatingthe plurality of group estimate signals by decoding the plurality ofgroups of correlated data bits.
 12. The method of claim 9, furthercomprising generating the plurality of group estimate signals bygenerating soft decoding information based on the plurality of groups ofcorrelated data bits.
 13. The method of claim 12, wherein the softdecoding information includes log likelihood ratios.
 14. The method ofclaim 9, further comprising generating the plurality of group estimatesignals by generating a plurality of probability vectors correspondingto respective ones of the plurality of groups of correlated data bits,wherein the plurality of probability vectors includes probabilities thateach of the correlated data bits has a respective value.
 15. The methodof claim 9, further comprising generating the plurality of groupestimate signals by decoding two or more of the plurality of groups ofcorrelated data bits concurrently.
 16. The method of claim 9, whereinone or more of the plurality of groups of correlated data bits has adifferent size than others of the plurality of groups of correlated databits.